Socket Address এবং Structure হলো Socket Programming-এর একটি গুরুত্বপূর্ণ অংশ, যা সঠিকভাবে ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ স্থাপনের জন্য প্রয়োজনীয়। Socket Address সাধারণত IP Address এবং Port Number-এর সমন্বয়ে গঠিত, যা নির্দিষ্ট ডিভাইস এবং পরিষেবার সাথে সংযোগ স্থাপন করতে সহায়ক হয়। Unix সিস্টেমে সঠিক Socket Address এবং Structure ব্যবহার করে বিভিন্ন প্রোটোকল, যেমন TCP এবং UDP, এর মাধ্যমে যোগাযোগ করা হয়।
Socket Address হলো IP Address এবং Port Number-এর একটি কম্বিনেশন, যা একটি নির্দিষ্ট নেটওয়ার্ক ডিভাইস এবং পরিষেবাকে চিহ্নিত করে। এটি সঠিক ডিভাইস বা সার্ভারের সাথে সংযোগ স্থাপনের জন্য প্রয়োজনীয় এবং এটি নিম্নলিখিত উপাদানগুলো নিয়ে গঠিত:
Socket Structure বা ডাটা স্ট্রাকচার হলো একটি নির্দিষ্ট ফরম্যাট, যা Socket Address ধারণ করে এবং সঠিকভাবে নেটওয়ার্ক প্রোটোকল অনুযায়ী কাজ করে। Unix সিস্টেমে Socket Structure সাধারণত sockaddr
নামে পরিচিত এবং এটি বিভিন্ন প্রোটোকল অনুযায়ী ভিন্ন হতে পারে। নিচে এর দুটি প্রধান প্রকার আলোচনা করা হলো:
sockaddr
একটি জেনেরিক ডাটা স্ট্রাকচার, যা বিভিন্ন ধরনের Socket Address ধারণ করে। এটি সাধারণত নিম্নলিখিত ফিল্ডগুলো নিয়ে গঠিত:
sa_family_t
টাইপের ফিল্ড, যা Socket-এর ঠিকানার পরিবার (Address Family) নির্দেশ করে, যেমন AF_INET (IPv4), AF_INET6 (IPv6), বা AF_UNIX (Unix Domain Socket)।struct sockaddr {
sa_family_t sa_family; // Address family (e.g., AF_INET, AF_INET6)
char sa_data[14]; // Address data (IP address and port number)
};
sockaddr একটি জেনেরিক স্ট্রাকচার হওয়ায়, এটি সরাসরি ব্যবহার করা হয় না। পরিবর্তে, প্রোটোকল অনুযায়ী নির্দিষ্ট স্ট্রাকচার ব্যবহার করা হয়, যেমন sockaddr_in IPv4-র জন্য এবং sockaddr_in6 IPv6-র জন্য।
sockaddr_in
হলো IPv4 ঠিকানার জন্য নির্দিষ্ট ডাটা স্ট্রাকচার, যা sockaddr
থেকে উদ্ভূত। এটি IP Address এবং Port Number-কে একটি নির্দিষ্ট ফরম্যাটে ধারণ করে।
struct sockaddr_in {
short int sin_family; // Address family (AF_INET for IPv4)
unsigned short int sin_port;// Port number (use htons() to set)
struct in_addr sin_addr; // IP address (use inet_addr() or similar to set)
char sin_zero[8]; // Padding to make the structure the same size as sockaddr
};
htons()
ফাংশন ব্যবহার করে নেটওয়ার্ক অর্ডারে সেট করা হয়।inet_addr()
ফাংশন বা inet_aton()
ফাংশন ব্যবহার করে সেট করা হয়।IPv6 ঠিকানার জন্য sockaddr_in6
স্ট্রাকচার ব্যবহার করা হয়, যা IPv6 অ্যাড্রেস ধারণ করে। এটি নিম্নরূপ:
struct sockaddr_in6 {
sa_family_t sin6_family; // Address family (AF_INET6 for IPv6)
in_port_t sin6_port; // Port number (use htons() to set)
uint32_t sin6_flowinfo; // IPv6 flow information
struct in6_addr sin6_addr; // IPv6 address
uint32_t sin6_scope_id; // Scope ID (like an interface index)
};
sin6_family: এটি সোকেট অ্যাড্রেসের পরিবার নির্দেশ করে, যেমন AF_INET6 (IPv6)।
Unix Domain Sockets (UDS) এর জন্য sockaddr_un
স্ট্রাকচার ব্যবহার করা হয়, যা লোকাল ফাইল সিস্টেমে সোকেট ফাইল চিহ্নিত করতে সহায়ক।
struct sockaddr_un {
sa_family_t sun_family; // Address family (AF_UNIX)
char sun_path[108]; // Path to the socket file
};
common.read_more